﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using CaptchaLearning.Infrastructure.Algorithm;

namespace CaptchaLearning.Infrastructure.Model
{
    /// <summary>
    /// Class Project chứa các thông tin cần thiết của ứng dụng.
    /// Cho phép lưu lại toàn bộ ứng dụng xuống xml 
    /// => có lợi nếu sau này học thử mô hình khác vẫn có thể lưu lại backup mô hình hiện tại
    /// </summary>

    [DataContract(Name = "Project", Namespace = "CaptchaLearning.Infrastructure.Model")]
    public class Project
    {
        /// <summary>
        /// Danh sách ký tự mà chương trình xử lý
        /// </summary>
        [DataMember]
        public ObservableCollection<Character> Characters { get; set; }

        /// <summary>
        /// Số pixel trên 1 cột thin image
        /// </summary>
        [DataMember]
        public int Pixels { get; set; }

        /// <summary>
        /// Giải thuật được dùng, mặc định là Baum-Welch
        /// </summary>
        public IAlgorithm Algorithm { get; set; }
        [DataMember]
        public AlgorithmOption AlgorithmOption { get; set; }

        /// <summary>
        /// Độ giãn
        /// </summary>
        [DataMember]
        public int Tolerance { get; set; }

        /// <summary>
        /// Số vòng lặp tối đa
        /// </summary>
        [DataMember]
        public int Iterations { get; set; }

        public Project()
        {
            this.Characters = new ObservableCollection<Character>();
            this.Pixels = 16;
            this.Tolerance = 16;
            this.Iterations = 16;
            this.Algorithm = new BaumWelchLearning();
            this.AlgorithmOption = Model.AlgorithmOption.Backward_Forward;
        }
    }
}
